/**
* @Author: Crissu
* @Date: 2021/4/14 21:30
# @About: context 包
*/

package chapter_4

import (
	"context"
	"fmt"
)

// 使用 context 包，进行传值处理
func Example_414_05() {
	ProcessRequest2("jane", "abc123")
}

type ctxKey int

const (
	ctxUserID ctxKey = iota
	ctxAuthToken
)

func ProcessRequest2(userID, authToken string) {
	ctx := context.WithValue(context.Background(), ctxUserID, userID)
	ctx = context.WithValue(ctx, ctxAuthToken, authToken)
	HandleResponse2(ctx)
}

func HandleResponse2(ctx context.Context) {
	fmt.Printf(
		"handling response for %v (auth: %v)",
		UserID(ctx),
		AuthToken(ctx),
	)
}

func AuthToken(ctx context.Context) string {
	return ctx.Value(ctxAuthToken).(string)
}

func UserID(ctx context.Context) string {
	return ctx.Value(ctxUserID).(string)
}
